/*
 * Copyright (C) 2020 The LINN Authors
 *
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
 * in compliance with the License. You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software distributed under the License
 * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
 * or implied. See the License for the specific language governing permissions and limitations under
 * the License.
 */
package com.juqimiao.linn.transfer.query;

/**
 * 表示要求获取分页数据的请求。通常需要继承此类建立自定义的用于查询的分页Query类型。
 *
 * <p>
 *  {@link PagableQuery} 用于提供相关的从持久化存储中获取分页记录的相关参数。
 *  提供 PageNumber， PageSize，IsTotalCountSupplied。
 *
 * </p>
 *
 * @author collin
 */
public class PagableQuery extends Query {

    private int pageNumber = 1;
    private int pageSize = 10;
    private boolean requestRecordTotal = true;

    /**
     * 获取数据页码数。
     *
     * @return 页码数。
     */
    public int getPageNumber() {
        return pageNumber;
    }

    /**
     * 设置数据页码数。
     *
     * @param pageNumber 页码数。
     */
    public void setPageNumber(int pageNumber) {
        this.pageNumber = pageNumber;
    }

    /**
     * 获取每页返回的记录数。
     *
     * @return 记录数。
     */
    public int getPageSize() {
        return pageSize;
    }

    /**
     * 设置每页返回的记录数。
     *
     * @param pageSize 记录数。
     */
    public void setPageSize(int pageSize) {
        this.pageSize = pageSize;
    }

    /**
     * 获取是否要求返回记录总数。
     *
     * @return {@link boolean}, 当为True时，表示需要返回总记录数；否则不返回总记录数。
     */
    public boolean isRequestRecordTotal() {
        return requestRecordTotal;
    }

    /**
     * 设置是否要求返回记录总数。
     *
     * @param requestRecordTotal 是否需要返回总记录数的 {@link boolean}。
     */
    public void isRequestRecordTotal(boolean requestRecordTotal) {
        this.requestRecordTotal = requestRecordTotal;
    }


    /**
     * 获取返回记录的开始记录的位置数（偏移量）。
     *
     * @return 开始记录位的置数。
     */
    public int getRecordOffset() {
        return pageNumber > 0 ? (pageNumber - 1) * pageSize : 0;
    }

}
